package cn.itcast.demo.dao;

import cn.itcast.demo.pojo.User;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

//@Component
public class FakeDao {
    //获取一个日志的工具
    Logger logger = LoggerFactory.getLogger(FakeDao.class);

//    @Autowired
//    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

//    @HystrixCommand(fallbackMethod = "queryUserByIdsFallback")
//    public User queryUserByIds(Long id) {
//
////        //根据服务名称，获取服务实例对象，由于服务可以集群，所以api设定为获取一个集合
////        List<ServiceInstance> serviceInstances = discoveryClient.getInstances("user-service");
////
////        int size = serviceInstances.size();
////        int randomIndex=(int)(Math.random()*size);
////
////        ServiceInstance serviceInstance = serviceInstances.get(randomIndex);
////
////
////
////        //主机地址
////        String host = serviceInstance.getHost();
//////        端口号
////        int port = serviceInstance.getPort();
//
//        //根据user-service暴露的rest地址来请求得到对应的user
//
//        //之前根据discoverClient来请求的，此时换成了restTemplate直接请求，之所以敢直接是因为有Ribbon支持，
//        // 所以他自己可以实现负载均衡（1.获取所有资源，2.选择。3.使用）
//        long start=System.currentTimeMillis();
//        User user = restTemplate.getForObject("http://user-service/user/" + id, User.class);
//        long end = System.currentTimeMillis();
//        logger.info("本次查询真正的的id为：{}，耗时为： {}毫秒", id, end - start);
//
//        return user;
//
//    }

    //回调方法，当上面的执行方法出问题时才调用，回调方法的返回值类型和参数要与原来的一致
    public User queryUserByIdsFallback(Long id) {
        User user = new User();
        user.setId(id);
        user.setName("查询失败");
        return user;
    }


}
